import apis from "./apis"
import $axios from "@/plugins/axios"
import { utils, uiMessage } from '@/utils'

class Ass_api {
    constructor (){
        this.$axios = $axios
    }
    downloadDictionary(dictionaryName, success) {
        // success 通过then方法调用
        let {path, method} = apis.dictionaryDownloadUrl
        return $axios(path, method, {
                "key": dictionaryName
        }).then(data => {
            if(utils.isNotNull(data)){
                return data;
            } else {
                // 提示
                uiMessage.error('获取字典失败');
                return null;
            }
        }).catch(err => {
            console.log(err)
        })
    }
    /**
     * 拉取数据信息
     * @param pMarkTaskId
     * @param fetchType
     * @param success
     */
    fetchFileInfo(pMarkTaskId, fetchType, success) {
        let params = {
            'markTaskId': pMarkTaskId,
            "markFileId": fetchType
        };
        let {path, method} = apis.fileInfoUrl
        // 获取文件信息
        return $axios(path, method, params).then(data => {
            if (data.rt.status == 200) {
                return data.data
            } else {
                // 提示
                uiMessage.error(data.data);
                return null;
            }
        }).catch(err => {
            console.log(err)
        });   
    }
    /**
     * 拉取所有信息
     * @param pMarkTaskId
     * @param success 通过then回调执行 不要通过传参形式了
     * getFileInfo('').then(success).catch(error)
     */
    getFileInfo(pMarkTaskId) {
        return this.fetchFileInfo(pMarkTaskId, "all");
    }
    /**
     * 拉取所有信息
     * @param pMarkTaskId
     * @param success
     */
    getFileInfo(pMarkTaskId) {
        return this.fetchFileInfo(pMarkTaskId, "all");
    }
    /**
     * 拉取列表信息，不含默认结果
     * @param pMarkTaskId
     * @param success
     */
    getFileList(pMarkTaskId, success) {
        return this.fetchFileInfo(pMarkTaskId, "list");
    }
    /**
     * 拉取结果,灵活 为了复检功能
     * @param param
     * @param success then 当中执行 
     * @param error  catch 中执行
     */
    getFileListNew(param) {
        if (Object.prototype.toString.call(param) !== '[object Object]') {
            console.warn("传入的参数不是对象！");
            return false;
        }
        return this.fetchFileInfoNew(param);
    }
    /**
     * 拉取数据信息
     * @param params 对象,包含参数 {'
     *       markTaskId': pMarkTaskId,
            "markFileId": list,
            "recheck": 1}
     * @param success
     */
    fetchFileInfoNew(params) {
        // 获取文件信息
        let {path, method} = apis.fileInfoUrl
        return $axios(path, method, params).then(data => {
            if (data.rt.status != 200) {
                // uiMessage.error(data.data);
                uiMessage.successGoBase(data.data);
                return null;
            } 
            return data.data;
        }).catch(err => {
            console.log(err);
        })
    }
    /**
     * 获取文件默认结果
     * @param pMarkTaskId
     * @param markFileId
     * @param success
     */
    getFileDefaultResultInfo(pMarkTaskId, markFileId) {
        return this.fetchFileInfo(pMarkTaskId, markFileId);
    }
    // 获取标客任务列表, 如中文转写业务使用
    getFileListInfo(pTaskId, pMarkTaskId, success) {
        var params = {
            userid: '',
            data: JSON.stringify({
                'taskId': pTaskId,
                "markTaskId": pMarkTaskId
            })
        };
        let {path, method} = apis.fileListInfoUrl
        // 获取文件信息
        return $axios(path, method, params).then( data => {
            if (data.rt.status == 200) {
                return data.data
            } else {
                // 提示 
                uiMessage.error(data.data);
                return null;
            }
        }).catch(err => {
            console.log(err)
        });
    }
    // 获取任务信息
    getTaskInfo(uriParam, postParam) {
        let {path, method} = apis.taskInfoUrl
        var url = utils.addUriParam(path, uriParam);

        return $axios(url, method, postParam).then(data => {
            if (data.rt.status == 200) {
                return JSON.parse(data.data)
            } else {
                // 提示 
                uiMessage.error(data.data)
                return null
            }
        }).catch(err => {
            console.log(err)
        });    
    }
    // 获取音频url
    getFileUrl(uriParam) {
        return utils.addUriParam(apis.filePathUrl.path, uriParam);
    }
    // 获取音频url
    getFileRangeUrl(uriParam) {
        return utils.addUriParam(apis.fileRangePathUrl.path, uriParam);
    }
    // 获取结果信息
    getFileResultInfo(uriParam) {
        let {path, method} = apis.fileResultInfoUrl
        return $axios(path, method, uriParam).then(data => {
            if (data.rt.status == 200) {
                return data.data
            } else {
                // 提示
                uiMessage.error(data.data)
                return null
            }
        }).catch(err => {
            console.log(err)
        })
    }
    // 获取结果信息 （sdk2.0）
    getResultBySDK(uriParam, success) {
        let {path, method} = apis.getResultUrl
        return $axios(path, method, uriParam).then(data => {
            if (data.rt.status == 200) {
                return data.data
            } else {
                // 提示
                uiMessage.error(data.data)
                return null
            }
        }).catch(err => {
            console.log(err)
        })
    }
    // 获取最新结果
    getCurrentResult(taskId, markTaskId, markTaskFileId, success, isSkipError) {
        // var isOk = true;
        var uriParam = {
            taskId: taskId,
            markTaskId: markTaskId,
            markTaskFileId: markTaskFileId,
            field: 'final'
        };
        let {path, method} = apis.currentResultUrl
        const data = $axios(path, method, uriParam).then(data => {
            if(data.rt.status != 200){
                uiMessage.error("获取结果异常...")
                // throw new Error(`获取结果异常...,状态码${data.rt.status}`)
                return null
            }
            if(!utils.isNotNull(data.data)){
                // return Promise.reject(`结果为空`)
                return null
            }
            return data.data
        }).catch(err => {
            console.log(err)
        })

        // const data = await $axios(apis.currentResultUrl.path, "GET", uriParam)
        // if(data.rt.status != 200){
        //     uiMessage.error("获取结果异常...");
        //     // throw new Error(`获取结果异常...,状态码${data.rt.status}`)
        //     return ;
        // }
        // if(!utils.isNotNull(data.data)){
        //     throw new Error(`结果为空`)
        //     // return ;
        // }

        // return data
            
            
        // const data = new Promise((resolve, reject) => {
        //     $axios(apis.currentResultUrl.path, "GET", uriParam).then(data => {
        //         if(data.rt.status != 200){
        //             uiMessage.error("获取结果异常...");
        //             throw new Error(`获取结果异常...,状态码${data.rt.status}`)
        //         }
        //         if(!utils.isNotNull(data.data)){
        //             throw new Error(`结果为空`)
        //         }
        //         resolve(data.data)
        //     }).catch(err => {
        //         reject(err)
        //     })

        // })
        return data
    }
    // 保存结果
    saveResult(uriParam, postParam) {
        // if (async !==false) async = true; //默认异步操作
        let {path, method} = apis.saveResultUrl
        var saveUrlEx = utils.addUriParam(path, uriParam);
        return $axios(saveUrlEx, method, postParam).then(data => {
            if (data.rt.status == 200) {
                uiMessage.fade("结果保存成功！");
                return data;
            } else if (data.rt.status == 200101) {
                uiMessage.successGoBase("该任务已被回收或放弃!");
                return Promise.reject(data);
            } else if (data.rt.status == 200107) {
                uiMessage.successGoBase("该任务已下架!");
                return Promise.reject(data);
            } else if (data.rt.status == 200201) {
                uiMessage.successGoBase("该批次已删除!");
                return Promise.reject(data);
            } else if (data.rt.status == 200102) {
                uiMessage.successGoBase("该任务已删除!");
                return Promise.reject(data);
            } else if (data.rt.status == 200402) {
                uiMessage.successGoBase("该任务已被回收或转移!");
                return Promise.reject(data);
            } else {
                uiMessage.error("保存失败：" + data.data);
                return Promise.reject(data);
            }
        });
    }
    //获取历史结果列表
    getHistoryList(taskId, markTaskId, markTaskFileId) {
        // var isOk = true;
        var uriParam = {
            taskId: taskId,
            markTaskId: markTaskId,
            markTaskFileId: markTaskFileId,
            field: 'history'
        };
        let {path, method} = apis.historyList
        return $axios(path, method, uriParam).then(data => {
                if (data.rt.status == 200) {
                    if (utils.isNotNull(data.data)) {
                        return data.data;
                    } else {
                        uiMessage.fade('还没有历史结果')
                        //获取结果为空
                        return null;
                    }
                } else {
                    // if (isSkipError !== true) {
                    //     this.ass_api.error("获取结果异常...");
                    // }
                    return null;
                }
            }).catch(err => {
                console.error(err);
            }); // 同步    
        // return isOk;
    }
    //获取历史结果详情
    getHistoryInfo(taskId, markTaskId, markTaskFileId, version) {
        var isOk = true;
        var uriParam = {
            taskId: taskId,
            markTaskId: markTaskId,
            markTaskFileId: markTaskFileId,
            field: 'history',
            version: version
        };
        let {path, method} = apis.historyInfo
        return $axios(path, method, uriParam).then(data => {
            if (data.rt.status == 200) {
                if (utils.isNotNull(data.data)) {
                    return data.data;
                } else {
                    //获取结果为空
                    return null;
                }
            } else {
                return null;
            }
        }).catch(err => {
            console.error(err)
        }); // 同步    
        // return isOk;
    }
    submitTask(pMarkTaskId, postParams) {
        let {path, method} = apis.submitUrl
        var url = path + '?markTaskId=' + pMarkTaskId;
        return $axios(url, method, postParams).then(data => {
            if (data.rt.status == 200) {
                return true;
            } else {
                uiMessage.error(data.data);
                return false;
            }
        }).catch(err => {
            console.error(err)
        });
    }
    repulseTask(pMarkTaskId, putParams) {
        let {path, method} = apis.repulseTaskUrl
        var url = path + '?markTaskId=' + pMarkTaskId;
        return $axios(url, method, putParams).then(data => {
            if (data.rt.status == 200) {
                return data;
            } else {
                uiMessage.error(data.data);
                return Promise.reject(data.data);
            }
        })
    }
    pageNav(params){
        let {path, method} = apis.pageNavUrl
        return $axios(path, method, params).then(data => {
            if(data.rt.status==200 ||data.rt.status==100001||data.rt.status==100002){
                var newData=data.data;
                return newData;
            }else{
                uiMessage.error(data.data);
                return Promise.reject(data.data);
            }
        }).catch(err => {
            console.error(err)
        });
    }
    loginPage(params){
        let {path, method} = apis.loginUrl
        return $axios(path, method, params)
    }
    /**
     *  创建批次
     **/
    batchPriority(params){
        let {path, method} = apis.batchPriorityUrl
        return $axios(path, method, params).then(data => {
            if (data.rt.status == 200) {
                if (data.data) {
                    return data.data
                } else {
                    uiMessage.error("此优先级批次已达上限")
                    return null
                }
            } else {
                uiMessage.error(data.data)
                return null
            }
        }).catch(err => {
            console.error(err)
        });
    }
    // 批次信息拉取
    batchInfo(params){
        let {path, method} = apis.batchInfoUrl
        return $axios(path, method, params).then(data => {
            if (data.rt.status == 200) {
                if (data.data) {
                    return data.data
                } else {
                    uiMessage.fade(data.data)
                    return null
                }
            } else {
                uiMessage.fade(data.data)
                return null
            }
        }).catch(err => {
            console.error(err)
        });
    }
    // 创建批次归属任务查询
    batchAttributionTask(params){
        let {path, method} = apis.batchAttributionTaskUrl
        return $axios(path, method, params).then(data => {
            if (data.rt.status == 200) {
                return data.data;
            } else {
                uiMessage.fade(data.data);
                return null;
            }
        }).catch(err => {
            console.error(err)
        });
    }
    // 创建批次提交
    createBatch(params, uri = ''){
        let {path, method} = apis.createBatchUrl
        return $axios(path + uri, method, params).then(data => {
            console.log('执行了么执行额额')
            return data;
            if (data.rt.status == 200) {
                return data.data;
            } else {
                uiMessage.fade(data.data);
                return null;
            }
        }).catch(err => {
            console.error(err)
        });
    }
    BatchTaskNameS(params){
        let {path, method} = apis.BatchTaskNameSUrl
        return $axios(path, method, params).then(data => {
            if (data.rt.status == 200) {
                return data.data;
            } else {
                uiMessage.fade(data.data);
                return null;
            }
        }).catch(err => {
            console.error(err)
        });
    }
    getCloudInfo(params){ 
        let {path, method} = apis.getCloudInfoUrl
        return $axios(path, method, params).then(data => {
            if (data.rt.status == 200) {
                return data.data;
            } else {
                uiMessage.fade(data.data);
                return null;
            }
        }).catch(err => {
            console.error(err)
        });
    }
    dictionaryList(params = {}){ 
        let {path, method} = apis.dictionaryListUrl
        return $axios(path, method, params).then(data => {
            if (data.rt.status == 200) {
                return data.data;
            } else {
                uiMessage.fade(data.data);
                return null;
            }
        }).catch(err => {
            console.error(err)
        });
    }
    listenIntegral(params = {}){ 
        let {path, method} = apis.listenIntegralUrl
        return $axios(path, method, params).then(data => {
            if (data.rt.status == 200) {
                return data.data;
            } else {
                uiMessage.fade(data.data);
                return null;
            }
        }).catch(err => {
            console.error(err)
        });
    }
    integralDetail(params = {}){
        let {path, method} = apis.integralDetailUrl
        return $axios(path, method, params).then(data => {
            if (data.rt.status == 200) {
                return data.data;
            } else {
                uiMessage.fade(data.data);
                return null;
            }
        }).catch(err => {
            console.error(err)
        });
    }
    integralFileList(params = {}){
        let {path, method} = apis.integralFileListUrl
        return $axios(path, method, params).then(data => {
            if (data.rt.status == 200) {
                return data.data;
            } else {
                uiMessage.fade(data.data);
                return null;
            }
        }).catch(err => {
            console.error(err)
        });
    }
    taskDetailInfo(params = {}){
        let {path, method} = apis.taskDetailInfoUrl
        return $axios(path, method, params).then(data => {
            if (data.rt.status == 200) {
                return data.data;
            } else {
                uiMessage.fade(data.data);
                return null;
            }
        }).catch(err => {
            console.error(err)
        });
    }
    taskDetailFileList(params = {}){
        let {path, method} = apis.taskDetailFileListUrl
        return $axios(path, method, params).then(data => {
            if (data.rt.status == 200) {
                return data.data;
            } else {
                uiMessage.fade(data.data);
                return null;
            }
        }).catch(err => {
            console.error(err)
        });
    }
    
}
export default new Ass_api()
